home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1987-04-06 | 7.6 KB | 269 lines |
- 10 DEFINT A-Z
- 20 BRIGHT=10:DULL=2
- 50 CLS
- 55 KEY OFF
- 60 JAMSYM$=CHR$(8):RACSYM$=CHR$(15)
- 65 NUM.SCORE=0
- 150 ON ERROR GOTO 50000
- 160 OPEN "JAMMER.SCO" FOR INPUT AS #1
- 170 IF EOF(1) THEN CLOSE:GOTO 190
- 171 NUM.SCORE=NUM.SCORE+1
- 175 LINE INPUT #1,NAM$(NUM.SCORE):INPUT #1,SCO(NUM.SCORE)
- 180 GOTO 170
- 190 CLS:FOR S=NUM.SCORE+1 TO 10:NAM$(S)="-----------------":SCO(S)=0:NEXT :NUM.SCORE=10
- 200 CLS
- 300 DEF SEG:POKE 106,0
- 350 GOSUB 40000
- 400 YC=40:XC=12
- 500 LOCATE XC,YC
- 600 CP$(1)=CHR$(201)
- 700 CP$(2)=CHR$(187)
- 800 CP$(4)=CHR$(200)
- 900 CP$(3)=CHR$(188)
- 1000 KEY OFF:WIDTH 80
- 1100 DEF SEG=&HB800:POKE 0,77:IF PEEK(0)=77 THEN SEG=&HB800
- 1200 DEF SEG=&HB000:POKE 0,77:IF PEEK(0)=77 THEN SEG=&HB000
- 1300 CLS
- 1400 DEF FNPK$(ROW,COL)=CHR$(PEEK((ROW-1)*160 +(COL-1)*2))
- 1500 DEF SEG=SEG
- 1600 BRIGHT=10:DULL=2
- 1700 FALSE=0:TRUE=NOT FALSE
- 1800 Z=0
- 1900 IF Z>10 THEN Z=10
- 1950 DEF SEG=SEG
- 2000 FOR LVL=1 TO 6
- 2100 CY(1)=YC-(LVL*4+Z-1)
- 2200 CX(1)=XC-(LVL*2-1)
- 2300 CY(3)=YC+(LVL*4+Z-1)
- 2400 CX(3)=XC+(LVL*2-1)
- 2500 CY(4)=YC-(LVL*4+Z-1)
- 2600 CX(4)=XC+(LVL*2-1)
- 2700 CY(2)=YC+(LVL*4+Z-1)
- 2800 CX(2)=XC-(LVL*2-1)
- 2900 FOR I=1 TO 4
- 3000 LOCATE CX(I),CY(I)
- 3100 PRINT CP$(I);
- 3200 NEXT
- 3300 FOR X=CX(1)+1 TO CX(4)-1
- 3400 LOCATE X,CY(1):PRINT CHR$(186);
- 3500 LOCATE X,CY(2):PRINT CHR$(186);
- 3600 NEXT
- 3700 FOR Y=CY(1)+1 TO CY(2)-1
- 3800 LOCATE CX(1),Y:PRINT CHR$(205);
- 3900 LOCATE CX(3),Y:PRINT CHR$(205);
- 4000 NEXT
- 4100 XLIM(1,LVL)=CX(1)+1
- 4200 XLIM(2,LVL)=CX(2)+1
- 4300 XLIM(3,LVL)=CX(3)-1
- 4400 XLIM(4,LVL)=CX(4)-1
- 4500 YLIM(1,LVL)=CY(1)+2
- 4600 YLIM(2,LVL)=CY(2)-2
- 4700 YLIM(3,LVL)=CY(3)-2
- 4800 YLIM(4,LVL)=CY(4)+2
- 4900 IF LVL=1 THEN 5800
- 5000 FOR X=XLIM(1,LVL) TO XLIM(4,LVL)
- 5100 LOCATE X,YLIM(1,LVL):PRINT CHR$(4);
- 5200 LOCATE X,YLIM(2,LVL):PRINT CHR$(4);
- 5300 NEXT
- 5400 FOR Y=YLIM(1,LVL) TO YLIM(2,LVL) STEP 2
- 5500 LOCATE XLIM(1,LVL),Y:PRINT CHR$(4);
- 5600 LOCATE XLIM(3,LVL),Y:PRINT CHR$(4);
- 5700 NEXT
- 5800 NEXT
- 5900 FOR X=XC-1 TO XC+1
- 6000 LOCATE X,YLIM(1,6):PRINT STRING$(18," ");
- 6100 LOCATE X,YLIM(2,2):PRINT STRING$(18," ");
- 6200 NEXT
- 6300 FOR Y=YC-2 TO YC+2
- 6400 FOR X=XLIM(1,6) TO XLIM(1,2)
- 6500 LOCATE X,Y:PRINT " ";
- 6600 LOCATE X+12,Y:PRINT " ";
- 6700 NEXT
- 6800 NEXT
- 6900 TOTPTS=4*(50+5*INT(Z/2))-1
- 7000 LOCATE 3,1:PRINT "Total";
- 7100 LOCATE 4,1:PRINT "Points";
- 7200 LOCATE 2,1:PRINT USING " ###";TOTPTS;
- 7300 PTSREM=TOTPTS
- 7400 LOCATE 6,1:PRINT USING " ###";PTSREM
- 7500 LOCATE 7,1:PRINT "Remain";
- 7600 JAMSYM$=CHR$(8):RACSYM$=CHR$(15)
- 7700 RACLVL=6:JAMLVL=6
- 7800 RACX=XLIM(4,RACLVL):RACY=YLIM(4,RACLVL)
- 7900 JAMX=XLIM(3,JAMLVL):JAMY=YLIM(3,JAMLVL)
- 8000 RACBASESPD= 2:JAMBASESPD=1
- 8100 RACDIR=1:JAMDIR=2
- 8200 RACMAX=10:RACMIN=1
- 8300 RACXINC(1)=-1:RACYINC(1)=0
- 8400 RACXINC(2)=0:RACYINC(2)=1
- 8500 RACXINC(3)=1:RACYINC(3)=0
- 8600 RACXINC(4)=0:RACYINC(4)=-1
- 8700 JAMXINC(1)=0:JAMYINC(1)=-1
- 8800 JAMXINC(2)=-1:JAMYINC(2)=0
- 8900 JAMXINC(3)=0:JAMYINC(3)=1
- 9000 JAMXINC(4)=1:JAMYINC(4)=0
- 9100 JG$=CHR$(4)
- 9200 RACMOV%=RACBASESPD:JAMMOV%=JAMBASESPD
- 9250 IF NUM.SCO<>0 THEN LOCATE 25,1:PRINT USING "High Score: ##### by \ \";SCO(1),NAM$(1);
- 9300 '------------- Main loop ----------------
- 9400 A$=INKEY$:IF A$<>"" THEN GOSUB 14600
- 9500 IF ((JAMX=XC) OR (JAMY=YC)) AND (RACLVL<>JAMLVL) THEN GOSUB 18000
- 9600 RACMOV%=RACMOV%-1:IF RACMOV%=0 THEN RACMOV%=RACBASESPD:RAC.JUMPED=FALSE:GOSUB 9900
- 9700 JAMMOV%=JAMMOV%-1:IF JAMMOV%=0 THEN JAMMOV%=JAMBASESPD:JAM.JUMPED=FALSE:GOSUB 12200
- 9800 GOTO 9300
- 9900 '============= moves racer ================
- 10000 LOCATE RACX,RACY:PRINT " ";
- 10100 RACX=RACX+RACXINC(RACDIR):RACY=RACY+RACYINC(RACDIR)
- 10200 IF RACX<XLIM(1,RACLVL) OR RACX>XLIM(3,RACLVL) THEN 10800
- 10300 IF RACY<YLIM(1,RACLVL) OR RACY>YLIM(2,RACLVL) THEN 10800
- 10400 G$=FNPK$(RACX,RACY):IF G$=CHR$(4) THEN GOSUB 11100
- 10500 IF G$=CHR$(8) THEN 13400
- 10600 COLOR BRIGHT:LOCATE RACX,RACY:PRINT RACSYM$;:COLOR DULL
- 10700 RETURN
- 10800 RACX=XLIM(RACDIR,RACLVL):RACY=YLIM(RACDIR,RACLVL)
- 10900 RACDIR=(RACDIR MOD 4)+1
- 11000 GOTO 10100
- 11100 SOUND 56,2:PTSREM=PTSREM-1
- 11200 LOCATE 6,1:PRINT USING " ###";PTSREM
- 11300 IF PTSREM=0 THEN 11500
- 11400 RETURN
- 11500 CLS
- 11600 LOCATE 10,30
- 11650 SCO=INT(Z/2)*100+100
- 11800 LOCATE 12,30
- 11900 PRINT "Bravo -- now try this one"
- 12000 FOR I=1 TO 10:FOR J=0 TO 9:SOUND 200+50*J,1:NEXT :NEXT :CLS
- 12100 Z=Z+2:GOTO 1900
- 12200 '============= moves jammer ===============
- 12300 LOCATE JAMX,JAMY:IF JG$=CHR$(8) THEN COLOR BRIGHT ELSE COLOR DULL
- 12350 PRINT JG$;:COLOR DULL
- 12400 JAMX=JAMX+JAMXINC(JAMDIR):JAMY=JAMY+JAMYINC(JAMDIR)
- 12500 IF JAMX<XLIM(1,JAMLVL) OR JAMX>XLIM(3,JAMLVL) THEN 13100
- 12600 IF JAMY<YLIM(1,JAMLVL) OR JAMY>YLIM(2,JAMLVL) THEN 13100
- 12700 JG$=FNPK$(JAMX,JAMY)
- 12800 IF JG$=CHR$(15) THEN 13400
- 12900 COLOR BRIGHT:LOCATE JAMX,JAMY:PRINT JAMSYM$;:COLOR DULL
- 13000 RETURN
- 13100 JAMX=XLIM(JAMDIR,JAMLVL):JAMY=YLIM(JAMDIR,JAMLVL)
- 13200 JAMDIR=ABS(JAMDIR-1): IF JAMDIR=0 THEN JAMDIR=4
- 13300 GOTO 9900
- 13400 COLOR BRIGHT
- 13500 LOCATE XC,YC-Z/2-1
- 13600 PRINT "Oops";
- 13700 FOR I=250 TO 50 STEP -5:SOUND I,1:NEXT
- 13800 LOCATE 10,30
- 13850 SCO=(TOTPTS-PTSREM)/TOTPTS*100+(INT(Z/2))*100
- 13900 PRINT USING "Your score was ####" ;SCO
- 14000 FOR I=1 TO 5:LOCATE RACX,RACY:PRINT CHR$(8);:FOR WT=1 TO 500:NEXT:LOCATE RACX,RACY:PRINT " ";:FOR WT=1 TO 500:NEXT:NEXT
- 14100 CLS
- 14400 COLOR 2
- 14450 GOSUB 30000
- 14500 GOTO 200
- 14600 A=ASC(RIGHT$(A$,1))
- 14700 IF A=72 AND LEN(A$)=2 THEN A=1:GOTO 15200
- 14800 IF A=77 AND LEN(A$)=2 THEN A=2:GOTO 15200
- 14900 IF A=80 AND LEN(A$)=2 THEN A=3:GOTO 15200
- 15000 IF A=75 AND LEN(A$)=2 THEN A=4:GOTO 15200
- 15050 BEEP
- 15100 A=0:RETURN
- 15200 IF A=RACDIR THEN RACBASESPD=RACBASESPD-1:SOUND 250,3:GOTO 15700
- 15300 IF A=(RACDIR+1) MOD 4 +1 THEN RACBASESPD=RACBASESPD+1:SOUND 150,3:GOTO 15900
- 15400 IF A=(RACDIR MOD 4)+1 THEN 16100
- 15500 IF A=((RACDIR+2) MOD 4)+1 THEN 17300
- 15600 STOP
- 15700 IF RACBASESPD<RACMIN THEN RACBASESPD=RACMIN
- 15800 RETURN
- 15900 IF RACBASESPD>RACMAX THEN RACBASESPD=RACMAX
- 16000 RETURN
- 16100 IF ((RACDIR=1 OR RACDIR=3) AND ABS(RACX-XC)<2) THEN 16400
- 16200 IF ((RACDIR=2 OR RACDIR=4) AND ABS(RACY-YC)<2) THEN 16400
- 16300 RETURN
- 16400 LOCATE RACX,RACY:PRINT " ";
- 16500 IF RAC.JUMPED THEN RETURN
- 16600 RACLVL=RACLVL-1:SOUND 190,3:IF RACLVL<2 THEN RACLVL=2
- 16700 IF RACDIR=1 THEN RACY=YLIM(1,RACLVL)
- 16800 IF RACDIR=2 THEN RACX=XLIM(2,RACLVL)
- 16900 IF RACDIR=3 THEN RACY=YLIM(3,RACLVL)
- 17000 IF RACDIR=4 THEN RACX=XLIM(4,RACLVL)
- 17040 G$=FNPK$(RACX,RACY):IF G$=CHR$(4) THEN GOSUB 11100
- 17050 IF G$=CHR$(8) THEN 13400
- 17100 RAC.JUMPED=TRUE
- 17200 RETURN
- 17300 IF ((RACDIR=1 OR RACDIR=3) AND ABS(RACX-XC)<2) THEN 17600
- 17400 IF ((RACDIR=2 OR RACDIR=4) AND ABS(RACY-YC)<2) THEN 17600
- 17500 RETURN
- 17600 LOCATE RACX,RACY:PRINT " ";
- 17700 IF RAC.JUMPED THEN RETURN
- 17800 RACLVL=RACLVL+1:SOUND 90,3:IF RACLVL>6 THEN RACLVL=6
- 17900 GOTO 16700
- 18000 IF RND(5)<0.97-(Z*0.1) THEN LOCATE JAMX,JAMY:PRINT " "; ELSE SOUND 300,2:SOUND 400,2
- 18100 IF JAM.JUMPED THEN RETURN
- 18200 JAM.JUMPED=TRUE:IF RND(5)>0.9 THEN RETURN
- 18250 IF JAMLVL>2 AND RND(0.5)>0.9 THEN JAMLVL=JAMLVL-1:SOUND 190,3:GOTO 18500
- 18300 IF RACLVL>JAMLVL THEN JAMLVL=JAMLVL+1:SOUND 90,3
- 18400 IF RACLVL<JAMLVL THEN JAMLVL=JAMLVL-1:SOUND 190,3
- 18500 IF JAMDIR=1 THEN JAMX=XLIM(1,JAMLVL)
- 18600 IF JAMDIR=2 THEN JAMY=YLIM(2,JAMLVL)
- 18700 IF JAMDIR=3 THEN JAMX=XLIM(3,JAMLVL)
- 18800 IF JAMDIR=4 THEN JAMY=YLIM(4,JAMLVL)
- 18900 RETURN
- 30000 IP=1
- 30010 FOR I=1 TO 10
- 30020 IF SCO(I)>SCO THEN IP=I+1
- 30030 NEXT
- 30040 IF IP=11 THEN RETURN
- 30050 PRINT "Congratulations, your score is in the top 10 !!!"
- 30055 IF INKEY$<>"" THEN 30055
- 30060 PRINT:PRINT
- 30070 PRINT"What is your name: ";:COLOR BRIGHT:LINE INPUT N$:COLOR DULL
- 30080 FOR I=9 TO IP STEP -1
- 30090 NAM$(I+1)=NAM$(I)
- 30100 SCO(I+1)=SCO(I)
- 30110 NEXT
- 30120 SCO(IP)=SCO
- 30130 NAM$(IP)=N$
- 30140 OPEN "JAMMER.SCO" FOR OUTPUT AS #1
- 30150 FOR I=1 TO 10
- 30155 PRINT #1,NAM$(I):PRINT#1,SCO(I)
- 30160 NEXT:CLOSE:RETURN
- 40000 RC=60
- 40005 JC=10:JR=20
- 40010 COLOR BRIGHT:LOCATE 10,RC,0:PRINT "Racer ";
- 40020 LOCATE JR,JC:PRINT " Jammer":COLOR DULL
- 40030 FOR WT=1 TO 50:NEXT
- 40035 IF JR=11 THEN 41000
- 40040 RC=RC-1:JC=JC+1
- 40045 IF JC>RC-10 THEN LOCATE JR,JC:PRINT " ";:JR=JR-1:JC=JC-1
- 40050 GOTO 40010
- 41000 LOCATE 1 ,10:PRINT "Use arrow keys to speed up,slow down, and change direction"
- 41005 PRINT:PRINT " Press Space Bar to Begin or Q to Quit"
- 41010 LOCATE 5,20:PRINT RACSYM$;" -- Racer ";JAMSYM$;" -- Jammer"
- 41050 LOCATE 15,10
- 41055 PRINT "High Scores:"
- 41056 PRINT " --------------":PRINT
- 41060 FOR I=1 TO 5
- 41063 IF RIGHT$(NAM$(I),1)="|" THEN COLOR DULL ELSE COLOR BRIGHT
- 41065 PRINT USING " ## \ \ ##### ";I,NAM$(I),SCO(I);
- 41066 IF RIGHT$(NAM$(I+5),1)="|" THEN COLOR DULL ELSE COLOR BRIGHT
- 41068 PRINT USING " ## \ \ ##### ";I+5,NAM$(I+5),SCO(I+5)
- 41069 COLOR DULL
- 41070 NEXT
- 41095 IN$=INKEY$
- 41096 IF IN$=" " THEN CLS:RETURN
- 41097 IF IN$="Q" OR IN$="q" THEN CLS:SYSTEM ELSE 41095
- 50000 '==== Error =======
- 50010 IF ERR=53 AND ERL=160 THEN GOTO 51000
- 50090 ON ERROR GOTO 0
- 51000 NAM$(1)="Heroic |":SCO(1)=500
- 51005 NAM$(2)="Professional |":SCO(2)=400
- 51010 NAM$(3)="Challenger |":SCO(3)=300
- 51015 NAM$(4)="Excellent |":SCO(4)=250
- 51020 NAM$(5)="Very Good |":SCO(5)=200
- 51025 NAM$(6)="Good |":SCO(6)=150
- 51030 NAM$(7)="Amateur |":SCO(7)=100
- 51035 NAM$(8)="Beginner |":SCO(8)=75
- 51045 NAM$(9)="Poor |":SCO(9)=50
- 51050 NAM$(10)="Why Bother? |":SCO(10)=25
- 51100 NUM.SCORE=10
- 52000 RESUME 190
-